package com.svh.Controlador;

import com.svh.Entidad.Empleado;
import com.svh.Entidad.Usuario;
import com.svh.Paginator.EmpleadoPaginador;
import com.svh.Paginator.Paginador;
import com.svh.Paginator.UsuarioPaginator;
import com.svh.Servicios.EmpleadoServicio;
import com.svh.Utils.Utilitario;
import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import org.primefaces.model.LazyDataModel;

/**
 *
 * @author Luis Alonso Ballena Garcia
 */
@ManagedBean(name = "asignadorControlador")
@ViewScoped
public class EmpleadoUserControlador implements Serializable {

    private EmpleadoServicio emplservicio;
    private Empleado empleado;
    private LazyDataModel<Empleado> empleados;
    private LazyDataModel<Empleado> empleadosSinUsers;
    private LazyDataModel<Usuario> cuentasSinAsignar;
    private Usuario user;
    @ManagedProperty("#{sesionControlador}")
    SesionControlador sesionControlador;

    public EmpleadoUserControlador() {

    }

    public void initLista() {
        if (!FacesContext.getCurrentInstance().isPostback()) {
            empleado = new Empleado();
            empleados = new Paginador<Empleado>(new EmpleadoPaginador(EmpleadoPaginador.WITH_USER));
            sesionControlador.generarModulo(3);
            /**
             * NUMERO MAGICO T_T *
             */
        }
    }
    
    public void initRegistrar()
    {
        if (!FacesContext.getCurrentInstance().isPostback()) {
            empleadosSinUsers = new Paginador<Empleado>(new EmpleadoPaginador(EmpleadoPaginador.WITHOUT_USER));
            cuentasSinAsignar = new Paginador<Usuario>(new UsuarioPaginator(UsuarioPaginator.ONLY_USER_NOT_ASSIGNED));
            empleado = new Empleado();
        }
    }
    
    
    public void asignar()
    {
        if(!esValido())
        {
            return;
        }
        empleado.setUsuario(user);
        emplservicio = new EmpleadoServicio();
        emplservicio.actualizarEmpleado(empleado,"Se ha asignado correctamente");
        empleado = new Empleado();
        user = new Usuario();
    }
    
    public boolean esValido()
    {
        boolean resultado = true;
        if(!esEmpleadoValido()){
            resultado = false;
        }else if(!esUsuarioValido()){
            resultado = false;
        }
        return resultado;
    }

    public boolean esEmpleadoValido()
    {
        if(empleado.getId() == null || empleado.getId().intValue() == 0)
        {
            Utilitario.enviarMensajeGlobalError("Debe seleccionar un empleado");
            return false;
        }
        return true;
    }
    
    public boolean esUsuarioValido()
    {
        if(user.getId() == null || user.getId().intValue() == 0)
        {
            Utilitario.enviarMensajeGlobalError("Debe seleccionar una cuenta");
            return false;
        }
        return true;
    }
    
    public void eliminar()
    {
        emplservicio = new EmpleadoServicio();
        empleado.setUsuario(null);
        emplservicio.actualizarEmpleado(empleado,"Se ha eliminado correctamente");
    }

    /**
     * GETTERS AND SETTERS *
     */
    
    public LazyDataModel<Empleado> getEmpleados() {
        return empleados;
    }

    public void setEmpleados(LazyDataModel<Empleado> empleados) {
        this.empleados = empleados;
    }

    public Empleado getEmpleado() {
        return empleado;
    }

    public void setEmpleado(Empleado empleado) {
        this.empleado = empleado;
    }

    public void setSesionControlador(SesionControlador sesionControlador) {
        this.sesionControlador = sesionControlador;
    }

    public LazyDataModel<Empleado> getEmpleadosSinUsers() {
        return empleadosSinUsers;
    }

    public void setEmpleadosSinUsers(LazyDataModel<Empleado> empleadosSinUsers) {
        this.empleadosSinUsers = empleadosSinUsers;
    }

    public LazyDataModel<Usuario> getCuentasSinAsignar() {
        return cuentasSinAsignar;
    }

    public void setCuentasSinAsignar(LazyDataModel<Usuario> cuentasSinAsignar) {
        this.cuentasSinAsignar = cuentasSinAsignar;
    }

    public Usuario getUser() {
        return user;
    }

    public void setUser(Usuario user) {
        this.user = user;
    }
    
    
    
}
